Individuals and organizations are faced with rapidly increasing amounts of data. Such data may rapidly increase in complexity and urgency. The individuals and organizations often need to analyze these data in order to act upon the data in an appropriate and a timely manner. In some domains, the actions that the individuals and organizations take are governed by regulations that also tend to become increasingly complex. For example, regulations might require the maintenance of meticulous historical records that are susceptible to auditing in the event that some problem should occur. Alternatively, the service level agreement (SLA) entered into between business organizations might require that data be analyzed systematically and actionable information in the data be acted upon proactively to avoid SLA violations and also to determine whether the agreement is being satisfied. Following the regulations, service level agreements, and other requirements can be very burdensome, and can grow more burdensome with the passage of time.
Because regulatory and SLA requirements have become so vastly complex, computer software lends itself to assisting individuals and organizations in their efforts to comply with the requirements. However, inasmuch as the regulations and SLAs tend to evolve, the computer software itself is tasked with evolving in step to keep up. Unfortunately, the customary process used for developing and updating computer software is slow and cumbersome. Software development cycles are usually long. These difficulties plaguing the evolution of computer software can be partially attributed to the fact that data are often hidden in the procedural software code. Data are often separated from the knowledge that can be applied to that data.